Multiprocessor computers are generally classified as being either "tightly-coupled" or "loosely-coupled", according to the memory arrangement which they use.
Tightly-coupled systems are shared-memory systems wherein a plurality of processors typically have no memory dedicated to their own use (other than cache memory) and share use of a centrally-administered memory. Central administration by a single control entity avoids the difficulty of coordinating the work of a plurality of control entities, and enables the central entity to manage the memory without conflict and easily to keep track of the status of every portion of that memory. Hence, memory management--including the allocation of memory storage space to processes--is easily implementable and may be made rather flexible. On the other hand, centralized memory management is a "bottleneck" that may restrict the performance of the multiprocessor. The central control entity also adversely affects the fault-tolerance of the multiprocessor, because it is a single point whose failure will generally incapacitate the whole system.
Loosely-coupled systems are non-shared memory systems wherein each processor has its own memory substantially dedicated to its own use and administered locally, i.e., by that processor's own control entity. Because each memory is locally administered by a different control entity that has no knowledge of, and no control over, memory of any other processor, extensive coordination and cooperation between the various processors is required for unified, system-wide, memory management. To avoid conflict between the plural control entities, assignment of processes to processors is generally predetermined and static, i.e., unvarying, and allocation of memory to processes is complex and rigidly limited.
An unsolved problem in the art, therefore, is how to provide flexible and dynamic memory management, akin to that available in tightly-coupled multiprocessor systems, in non-shared memory multiprocessor systems.